package com.sdgakj.study.java20180822;

import java.util.Arrays;

public class ForTest {

	public static void main(String[] args) {
		//
		// int[] num = { 2, 3, 4, 5, 6, 23, 23, 112, 43, 322 };
		// int a = 23;
		//
		// System.out.println(getValue(a, num));

		int[] a = { 1, 0, 0, 1, 0, 1 };
		int[] b = { 0, 1, 1, 1, 0, 1 };
		//

		int[] c = binaryArrayAdd(a, b);
		System.out.println(Arrays.toString(c));

	}

	public static String getValue(int val, int[] num) {
		if (num == null || num.length == 0) {
			return null;
		}
		for (int i = 0; i < num.length; i++) {
			if (num[i] == val) {
				return null;
			}
		}
		return null;
	}

	/**
	 * 算法导论 2.1-4 ： 考虑把两个n位二进制整数加起来的问题，这两个整数分别存储在两个n元数组A和B中。
	 * 这两个整数的和应按二进制形式存储在一个（n+1）元数组C中。请给出该问题的形式化描述，并写出伪代码
	 * 
	 * @param a
	 * @param b
	 * @return
	 */
	public static int[] binaryArrayAdd(int[] a, int[] b) {

		int[] c = new int[a.length + 1];
		int temp = 0;
		int i = a.length - 1;
		for (; i >= 0; i--) {
			c[i + 1] = (a[i] + b[i] + temp) % 2;
			temp = (a[i] + b[i] + temp) / 2;
			c[i] = temp;
		}

		return c;

	}
}
